package com.acerola;

import java.lang.reflect.Proxy;

/**
 * @author 陳樂
 * @version 1.0.0
 * @ClassName RpcClientProxy.java
 * @Description TODO
 * @createTime 2022年04月23日 21:59:00
 */
public class RpcClientProxy {

    public <T> T clientProxy(final Class<T> interfaceCls, final String host, int port) {
        //todo jdk代理,要学习
        //newProxyInstance，方法有三个参数：
        //
        //loader: 用哪个类加载器去加载代理对象
        //
        //interfaces:动态代理类需要实现的接口
        //
        //h:动态代理方法在执行时，会调用h里面的invoke方法去执行
        return (T) Proxy.newProxyInstance(interfaceCls.getClassLoader(),
                new Class<?>[]{interfaceCls}, new RpcInvokerProxy(host, port));
    }
}
